package com.higgins.lawapp.server.dataItemModel;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

import com.google.appengine.api.datastore.Key;
import com.higgins.lawapp.client.settings.dataItemModel.DataItemDTO;
import com.higgins.lawapp.client.settings.dataItemModel.DataItemLevelDTO;
import com.higgins.lawapp.client.settings.dataItemModel.DataItemSourceDTO;

@PersistenceCapable
public class DataItemSource {
	@SuppressWarnings("unused")
	@PrimaryKey
	@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
	private Key key;

	@Persistent
	private List<DataItemLevel> dataItemLevels;
	
	@Persistent
	private String dataSourceName;
	
	public void clearDataItemLevels()	{
		dataItemLevels = new ArrayList<DataItemLevel>();
	}
	public void addDataItemLevel(DataItemLevel dataItemLevel)	{
		if (dataItemLevels==null)
			dataItemLevels = new ArrayList<DataItemLevel>();
		dataItemLevels.add(dataItemLevel);
	}
	public List<DataItemLevel> getDataItemLevels()	{
		return dataItemLevels;
	}
	public void setDataItemSourceName(String dataSourceName)	{
		this.dataSourceName = dataSourceName;
	}
	public String getDataItemSourceName()	{
		return dataSourceName;
	}
	public void setDataItemSourceDTO(DataItemSourceDTO dataItemSourceDTO)	{
		dataSourceName = dataItemSourceDTO.getDataItemSourceName();
		Iterator<DataItemLevelDTO> dataItemLevelDTOIterator = dataItemSourceDTO.getDataItemLevelDTOs().iterator();
		clearDataItemLevels();
		while(dataItemLevelDTOIterator.hasNext())	{
			DataItemLevelDTO dataItemLevelDTO = dataItemLevelDTOIterator.next();
			DataItemLevel dataItemLevel = new DataItemLevel();
			dataItemLevel.setDataItemLevelDTO(dataItemLevelDTO);
			addDataItemLevel(dataItemLevel);
		}
	}
	public DataItemSourceDTO getDataItemSourceDTO()	{
		DataItemSourceDTO dataItemSourceDTO = new DataItemSourceDTO();
		dataItemSourceDTO.setDataItemSourceName(getDataItemSourceName());
		dataItemSourceDTO.setDataItemLevelDTOs(getDataItemLevelDTOs());
		
		return dataItemSourceDTO;
	}
	private List<DataItemLevelDTO> getDataItemLevelDTOs()	{
		List<DataItemLevelDTO> dataItemLevelDTOs = new ArrayList<DataItemLevelDTO>();
		Iterator<DataItemLevel> iterator = dataItemLevels.iterator();
		while (iterator.hasNext())	{
			DataItemLevel dataItemLevel = iterator.next();
			dataItemLevelDTOs.add(dataItemLevel.getDataItemLevelDTO());
		}
		return dataItemLevelDTOs;
	}
}
